package com.foreknow.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * Filter是一个可重用的组件
 * 创建一个过滤器，实现转换字符编码集
 *
 * init()方法：web 应用程序启动时，web 服务器将创建Filter 的实例对象，并调用其init方法，
 * 读取web.xml配置，完成对象的初始化功能，从而为后续的用户请求作好拦截的准备工作
 * （filter对象只会创建一次，init方法也只会执行一次）。开发人员通过init方法的参数，
 * 可获得代表当前filter配置信息的FilterConfig对象。
 */
public class CharacterEncodingFilter implements Filter {
    private String encoding = "ISO8859-1";
    private FilterConfig config;

    @Override
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
        encoding = config.getInitParameter("encoding");
    }

    //核心的拦截处理方法
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //设置服务器端向客户端响应的内容的类型(MIME)
        response.setContentType("text/html;charset=utf-8");
        //设置客户端向服务器端请求的字符编码集为utf-8
        request.setCharacterEncoding(encoding);
        //如果还有其它的过滤器，那么就要交给下一个过滤器来处理，如果没有其它过滤器，就将请求交给Servlet来处理
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        config = null;
    }
}